File handling within a cloud-based file system

ABSTRACT

In one general aspect, a computer-readable storage medium can be configured to store instructions that when executed cause one or more processors to perform a process. The process can include establishing at least a portion of a communication link between a computing device and a storage system operating within a cloud environment. The process can include accessing a user interface including a listing of files representing a plurality of files where at least a first portion of the plurality of files are stored in a local memory of the computing device and a second portion of the plurality of files are stored in the storage system.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a non-provisional of, and claims priority to, U.S.Patent Application No. 61/643,279, filed May 5, 2012, entitled “FILEHANDLING WITHIN A CLOUD-BASED FILE SYSTEM” and is a non-provisional of,and claims priority to, U.S. Patent Application No. 61/736,722, filedDec. 13, 2012, entitled “FILE HANDLING WITHIN A CLOUD-BASED FILESYSTEM”, both of which are each incorporated by reference herein intheir entireties.

TECHNICAL FIELD

This description relates to file handling within a cloud-based filesystem.

BACKGROUND

A variety of remote storage systems have been developed for storingfiles that can be accessed by a computing device. Often, these knownremote storage systems store files to back up local files stored on thecomputing device. Although these remote storage systems can be accessedvia a network, can store information reliably, and so forth, many ofthese known remote storage systems lack flexibility and integrationespecially when handling a variety of files that can be generated usingdifferent sources. Thus, a need exists for systems, methods, andapparatus to address the shortfalls of present technology and to provideother new and innovative features.

SUMMARY

In one general aspect, a non-transitory computer-readable storage mediumcan be configured to store instructions that when executed cause one ormore processors to perform a process. The process can includeestablishing at least a portion of a communication link between acomputing device and a storage system operating within a cloudenvironment, and can include storing a listing of files representing aplurality of files where at least a first portion of the plurality offiles are stored in a local memory of the computing device and a secondportion of the plurality of files are stored in the storage system. Theprocess can include designating a file from the listing of files foravailability offline based on a file category associated with the filefrom the listing of files.

In another general aspect, a non-transitory computer-readable storagemedium can be configured to store instructions that when executed causeone or more processors to perform a process. The process can includeestablishing at least a portion of a communication link between acomputing device and a storage system operating within a cloudenvironment. The process can also include receiving a request to open afirst file stored on the storage system and, in response to the requestto open the first file, caching the first file in a local memory of thecomputing device, the first file being cached with a first priority. Theprocess can further include receiving a request that a second filestored on the storage system be available offline and, in response tothe request that the second file be available offline, caching thesecond file in the local memory of the computing device, the second filebeing cached with a second priority that is lower than the firstpriority. The process can still further include predictively caching, inthe local memory of the computing device, a third file stored in thestorage system, the third file being selected based on one or moreattributes of the third file, the third file being cached with a thirdpriority that is lower than the second priority.

In yet another general aspect, a non-transitory computer-readablestorage medium can be configured to store instructions that whenexecuted cause one or more processors to perform a process. The processcan include establishing at least a portion of a communication linkbetween a computing device and a storage system operating within a cloudenvironment, the computing device including a local memory that isconfigured to cache files from the storage system. The process can alsoinclude receiving an indication that a file caching threshold of thelocal memory of the computing device has been met or exceeded. Theprocess can further include, in response to the indication, evicting,until an eviction threshold is met, at least a portion of a set ofcached files from the local memory of the computing device, the at leasta portion of the set of cached files being evicted from a lowest cachingpriority to a highest caching priority and based on respectivetimestamps of each file of the set of cached files.

The details of one or more implementations are set forth in theaccompanying drawings and the description below. Other features will beapparent from the description and drawings, and from the claims.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a diagram that illustrates computing devices configured toaccess files from a cloud-based storage system operating within a cloudenvironment.

FIG. 2 is a diagram that illustrates a computing device and a storagesystem according to an implementation.

FIG. 3 is a diagram that illustrates the user interface that can beprovided by a file manager to a computing device.

FIG. 4 is a diagram that illustrates a file system in which exampleapproaches for fetching (caching) files from a cloud-based storagesystem for storage in a local memory and for evicting (removing) filesfrom the local memory (cache).

FIG. 5 is a flowchart that illustrates a method related to filehandling.

FIGS. 6A-6C are flowcharts that illustrate methods related to filecaching.

FIG. 7 is a flowchart that illustrates a method related to eviction ofcached files.

DETAILED DESCRIPTION

FIG. 1 is a diagram that illustrates computing devices 110, 120configured to access files 19 from a storage system 150 operating withina cloud environment 100. Because the storage system 150 is operating inthe cloud environment 100, the storage system 150 can, in someimplementations, be referred to as a cloud-based storage system. Also,the storage system 150 can be a remote (e.g., non-local) storage systemthat is remotely access by the computing devices 110, 120. The cloudenvironment 100 can include a variety of hardware and/or softwarecomponents including servers (e.g., application servers), databases, andso forth. The components of the cloud environment 100 can be integratedinto a computing infrastructure configured to share (e.g., dynamicallyallocate) resources and/or service a variety of endpoints including thecomputing devices 110, 120.

The computing devices 110, 120 can be any type of device configured toaccess the storage system 150 operating within the cloud environment100. In some implementations, the computing devices 110, 120 can eachbe, for example, a wired device and/or a wireless device (e.g., Wi-Fienabled device) and can be, for example, a computing entity (e.g., apersonal computing device), a server device (e.g., a web server), amobile phone, a touchscreen device, a personal digital assistant (PDA),a laptop, a television including, or associated with, one or moreprocessors, a tablet device, e-reader, and/or so forth. The computingdevice(s) can be configured to operate based on one or more platforms(e.g., one or more similar or different platforms) that can include oneor more types of hardware, software, firmware, operating systems,runtime libraries, and/or so forth.

In some implementations, the computing devices 110, 120 can haverelatively few computing resources (e.g., processing resources, storageresources) compared with the cloud environment 100. Accordingly, thecomputing devices 110, 120 and the cloud environment 100 can becollectively configured so that the computing devices 110, 120 canleverage the computing resources of the cloud environment 100.Specifically, the storage system 150 of the cloud environment 100 andthe computing devices 110, 120 can be configured so that the storagesystem 150 operates as a primary storage system for the computingdevices 110, 120. As shown in FIG. 1, the computing device 110 and thecomputing device 120 respectively include a local memory 112 and a localmemory 122. Even though the computing devices 110, 120 include localmemories 112, 122, the local memories 112, 122 are configured to operateas a cache of (e.g., a temporary cache, a temporary storage location to)the storage system 150. Accordingly, the local memories 112, 122 canfunction as a secondary storage to the primary storage of the storagesystem 150. In some embodiments, for example, a portion of a storagecapacity of the storage system 150 allocated to (e.g., designated foruse by) the computing device 110 can be more than 10 times greater(e.g., 100 times greater, 1000 times greater) than a storage capacity ofthe local memory 112 of the computing device 110.

Even though the local memories 112, 122 of the respective computingdevices 110, 120 function as a cache (or secondary storage) to thestorage system 150, the files that are stored in one or more of thelocal memories 112, 122 and in the storage system 150 can be handled asa unitary or singular set of files. In other words, one or more of thelocal memories 112, 122, and the storage system 150 can function as aunitary storage system (e.g., a single virtual storage system, a singlevirtual hard drive). For example, files stored in one or more of thelocal memories 112, 122 and stored in the storage system 150 can bepresented to a user (e.g., presented to a user via a user interface)accessing the files in such a way that the storage locations may not bereadily distinguished. Accordingly, whether a user accesses files viathe computing device 110 or the computing device 120, a file listingassociated with files stored in one or more of the local memories 112,122, and the storage system 150 will be the same (or substantially thesame). More details related to file handling are described below.

As shown in FIG. 1, the storage system 150 is configured to store files19 that can be designated into one or more categories including hostedfiles, client files, remote source files, and so forth. In thisimplementation, most of the files 19 are labeled based on the categorywith which each of the files 19 is associated. Accordingly, the files 19include a web file 10 (also can be referred to as a hosted file), aclient file 11, and a remote source file 12. The web file 10 can beincluded in a web file category, the client file 11 can be included in aclient file category, and the remote source file 12 can be included in aremote source file category. In some implementations, each of the files19 can be various types of files such as, for example, a text-based file(e.g., a document file), a spreadsheet file, an image file (e.g., ajoint photographic experts group (JPEG) file), a video file (e.g., amoving picture experts group (MPEG) file), a music file (e.g., an MPEGaudio layer III (MP3) file), and so forth.

The web file 10 can be a file created using a web application 140 suchas that shown in FIG. 1. The web application 140 can be any type ofapplication that can be, for example, hosted within the cloudenvironment 100. In some implementations, the web application 140 can bea hosted application. In some implementations, web application 140 canbe remotely controlled as it operates within the cloud environment 100by one or more of the computing devices 110, 120. More details relatedto web applications and host applications are described later in thisDetailed Description.

The client file 11 can be a file that is stored in the storage system150 from one or more of the computing devices 110, 120. For example, theclient file 11 can be a file that is stored in the storage system 150from one or more of the computing devices 110, 120. For example, theclient file 11 can be a file produced using an application 126 operatingat the computing device 120. The application 126 can be a localapplication installed at and operating at the computing device 120. Insome implementations, the application 126 may not be operational withina cloud environment.

The remote source file 12 can be a file that is stored in the storagesystem 150 from a remote source 160. In some implementations, the remotesource 160 can be a source that operates outside of the cloudenvironment 100 (e.g., independent from the cloud environment 100 andfrom the computing devices 110, 120). In some implementations, theremote source 160 can be a computing device separate (or independent)from the computing devices 110, 120. In some implementations, a remotesource 160 can be a third-party source that operates independent of thecloud environment 100. In some implementations, the remote source 160can be moved into the storage system 150 in response to one or moreinstructions triggered by one or more of the computing devices 110, 120.

As shown in FIG. 1, at least a portion of the files 19 can be at leasttemporarily be stored (e.g., cached) in the local memory 122 of thecomputing device 120. Specifically, file 18 included in the files 19 isstored in local memory 122 of the computing device 120. The file 18 canbe a shadowed, mirrored, or synchronized copy of any of the files storedin the storage system 150. For example, the file 18 can be a shadowed ormirrored copy of the web file 10 stored in the storage system 150. Thefile 18, in some implementations, can be a file that is stored in localmemory 122 without being mirrored at the storage system 150. Forexample, the file 18 can be another client file, separate from clientfile 11, created at and stored in the local memory 122. In someimplementations, the file 18 can be a file that is stored (e.g., storedtemporarily) in the local memory 122 so that the file 18 can be readilyaccessed (e.g., manipulated) at computing device 120. Although not shownin FIG. 1, at least a portion of the files 19 can be at leasttemporarily stored in the local memory 112 of the computing device 110.

The storage system 150 includes a file manager 155. In someimplementations, the file manager 155 can function as a web application.The file manager 155 is configured to provide a user interface throughwhich the computing devices 110, 120 can access the files 19 stored inthe storage system 150 and/or at one or more of the computing devices110, 120. In some implementations, the user interface provided by thefile manager 155 can include a file system user interface. In someimplementations, the user interface provided by the file manager 155 canrepresent a listing of the files 19 (e.g., hierarchy, folder system,enumeration, record, inventory) and/or other metadata about the files 19(e.g., owner, creation date, filename, file availability/state). Thelisting of the files 19 can include references to (e.g., pointers to,indicators of) one or more of the files 19. Accessing the files 19 caninclude viewing, deleting, editing, downloading, uploading, and/or soforth.

For example, the web file 10 can be produced and stored in the storagesystem 150 using web application 140 in response to input from thecomputing device 120. The web file 10 (or an identifier thereof) canlater be viewed in a user interface provided by the file manager 155 ata display 114 of the computing device 110. The web file 10 can beselected and edited using the computing device 110 via the webapplication 140. An example of the user interface through which one ormore of the files 19 can be accessed is illustrated in FIG. 3 anddiscussed in more detail in connection with FIG. 3.

The files 19 can be associated with a user account so that a listing ofthe files 19 provided within a user interface by the file manager 155 tothe computing device 110 or the computing device 120 will be the samewhether a user logs in to the computing device 110 or the computingdevice 120. In other words, the listing of the files 19 can besynchronized regardless of the computing device through which thelisting of the files 19 is accessed. The listing of the files 19provided within the user interface by the file manager 155 can be thesame (e.g., synchronized, dynamically synchronized) even though avariety of categories of files can be included in the files 19 such asfiles categorized as a web application files, client files provided froma computing device, or files associated with a remote source. Thelisting of the files 19 provided within the user interface by the filemanager 155 can be the same even though the files 19 can be distributedbetween the storage system 150 and/or the computing devices 110, 120. Insome implementations, the listing of the files 19 can be the enumerationof which files are included in the files 19.

For example, in some implementations, a user can log in to the computingdevice 110 and can access and/or manipulate one or more of the files 19.After the user logs out of the computing device 110, the user can laterlog in to the computing device 120 to access and manipulate one or morefiles 19. When the user logs in to the computing device 120, the listingof the files 19 after the first login (using the computing device 110)can be presented to the user via the computing device 120. Accordingly,the listing of the files 19 can be seamlessly maintained (orsynchronized) regardless of the computing device through which the useraccesses files 19. Thus, the file manager 155 can be configured toprovide the same (or synchronized) listing of the files 19 whether theuser logs into the computing device 110 or the computing device 120. Insome implementations, even though the listing of the files 19 can bemaintained between the computing devices 110, 120, in someimplementations the states of one or more of the files 19 can change. Insome embodiments, the states can be related to the offline (e.g.,non-network) or online availability of a file. More details related tostates of files are discussed in connection with FIG. 3.

In some implementations, the file 18 can be a file that is downloaded to(e.g., fetched for) the computing device 120 for use at the computingdevice 120 by a user (if not already available in the local memory 122of the computing device 120). In some implementations, a current versionof a file (e.g., file 18) may already be available in the local memory122 of the computing device 120, and would not be downloaded from thestorage system 150. In some implementations, before a file is downloadedfrom the storage system 150, the local memory 122 may be audited todetermine whether or not the file is already cached in the local memory122.

In some implementations, the file 18 can be downloaded into the localmemory 122 on-demand by a user (e.g., in response to an instructiontriggered by the user) of the computing device 120. In someimplementations, the file 18, is stored in the local memory 122 can beavailable for offline access at the computing device 120. The computingdevice 120 may not have access to any network or a network where thestorage system 150 can be accessed when offline. For example, a user ofthe computing device 120 can request access to the remote source file 12stored in the storage system 150. In response to the requests, a copy ofthe remote storage file 12 can be downloaded to the local memory 122 ofthe computing device 120 as file 18. The file 18 can be used (e.g.,edited, manipulated, access) by the user at the computing device 120. Insome implementations, any changes to the file 18 can be mirrored in(e.g., synchronized within) the remote source file 12 stored in thestorage system 150.

In some implementations, the file 18 can be fetched (e.g., pre-fetched)and downloaded to the computing device 120 for use without beingexplicitly requested by a user of the computing device 120. In otherwords, one or more files can be automatically cached at the computingdevice 120 for use by a user. For example, when a user logs in to thecomputing device 120, the file 18 can be automatically downloaded to thelocal memory 122 of the computing device 120. In some implementations,the file can be automatically downloaded based on one or more criteria.The criteria can be related to a prediction as to whether or not thefile 18 may be accessed by the user of the computing device 120. In someimplementations, the criteria can include a criteria related to recentaccessing of the file 18, relationship of the file to other recentlyaccessed files 18, file categories and/or file types typically accessedby the user, and/or so forth. An example approach for downloading(fetching) files for storage in a local memory (e.g., from a cloud-basedstorage system) is illustrated in FIG. 4 and described in further detailbelow with respect to FIG. 4.

In some implementations, the file 18 can be removed from (e.g., deletedfrom, temporarily removed from, flushed from) the local memory 122 ofthe computing device 120. In some implementations, the file 18 can beremoved from the local memory 122 of the computing device 120 based onone or more criteria including, for example, datetime stamp of the file18, size of the file 18, and/or so forth. In some implementations, thefile 18 can be removed from the local memory 122 of the computing device120 in response to resources of the local memory 122 of the computingdevice 120 (or other components of the computing device 120) beingre-allocated for other operations of the computing device 120. In someimplementations, the file 18 can be removed from the local memory 122the computing device 120 in conjunction with other files that may bestored in the local memory 122. An example approach for evicting(removing) files from local memory (e.g., from a cloud-based storagesystem) is also illustrated in FIG. 4 and described in further detailbelow with respect to FIG. 4.

Although not shown in FIG. 1, in some implementations, one or more ofthe files 19 can be directly processed by an application of one or moreof the computing devices 110, 120 without being cached at the computingdevices 110, 120. In other words, caching of one or more of the files 19can be bypassed when processing is performed using one or more of thecomputing devices 110, 120. For example, processing of the web file 10and/or a portion thereof can be handled by the web application 140operating within the cloud environment 100 and/or using the application126 at the computing device 120. In such implementations, explicitcaching of the web file 10 in the local memory 122 of the computingdevice 120 may be bypassed. In some implementations, only a portion ofthe web file 10 may be stored in a temporary memory location within thecomputing device 120 separate from the local memory 122.

In some implementations, the local memories 112, 122 can be any type ofmemory such as a random-access memory, a disk drive memory (e.g., asolid-state drive (SSD)), flash memory, and/or so forth. In someimplementations, the local memories 112, 122 can be relatively long-termstorage memory compared with other memory included in the computingdevices 110, 120. In some implementations, the local memories 112, 122can be the longest-term memory components included in the computingdevices 110, 120. In some implementations, the local memories 112, 122can be separate from cache memory associated with a processor andseparate from RAM type memory. In some implementations, the localmemories 112, 122 can be implemented as more than one memory component(e.g., more than one random-access memory (RAM) component or disk drivememory) associated with the components of the computing devices 110,120.

In some implementations, the web application 140 can be configured to beexecuted or interpreted by a web browser (not shown). This can becontrasted with a native application that can include machine executablecode and can be configured to be executed directly by a processor or viaan operating system of a computing device, whereas, the web application140 may, in some implementation, be incapable of execution or displaywithout the aid of the web browser. Thus, the web application 140 can beoperated inside (e.g., executed from within) a browser with a dedicateduser interface, and typically provide functionality and an experiencethat is more rich and interactive than a standalone website but are lesscumbersome and monolithic than a desktop application. A web browser canbe executed by a computing device (e.g., the computing devices 110, 120)can receive code (e.g., HTML code, Javascript) from a remote server(e.g., a remote server that hosts a website) and can execute thereceived code on the computing device for the benefit of a user of thecomputing device. Examples of web applications can include games, photoeditors, and video players that are executed within the browser.

In some implementations the web application 140 can be a hostedapplication or a packaged application. Hosted applications may includeat least a portion of a web site that itself includes web pages, plussome metadata that may be especially pertinent to the web application orto the user of the web application to allow the web application toperform some particular functionality for the user. Such metadata mayinclude, for example, a name of the application, a description of theapplication, a version of the application, and any URLs that theapplication uses, including the launch page for the application (i.e.,the web page that a browser goes to when a user clicks the hostedapplication's icon). The metadata may be contained in a manifest file(e.g., a .crx file) hosted on a server of a developer or a server of adigital marketplace.

Packaged applications can be considered web applications whose code isbundled, so that the user can download at least a portion of the contentof a web application for execution by the browser. A packaged webapplication may not be dependent on network access to perform itsfunctionality for the user, and rather may be executed successfully bythe browser locally on the computing device without access to a network.Packaged web applications have the option of using Extension APIs,allowing packaged applications to change the way the browser behaves orlooks.

FIG. 2 is a diagram that illustrates a computing device 210 and astorage system 250 according to an implementation. The computing device210 is configured to establish at least a portion of a communicationlink (e.g., a unidirectional communication link, a bidirectionalcommunication link) with the storage system 250. Although not shown inFIG. 2, the storage system 250 can be configured to operate within acloud environment. The storage system 250 includes files 29 and a filemanager 255. Although not explicitly shown in FIG. 2, in thisimplementation, the files 29 can include files that are stored in alocal memory 265 of the computing device 210. Accordingly, the filemanager 255 can be associated with files that are locally stored at thecomputing device 210 or remotely stored in the storage system 250. Thelocally stored files can be synchronized with and managed by the filemanager 255 included in the storage system 250.

As shown in FIG. 2, the computing device 210 includes a file managerapplication 230. The file manager application 230 can be configured tointeract with (e.g., access, trigger operations of) the file manager 255of the storage system 250. The file manager application 230 can, in someimplementations, be a web application configured to operate within abrowser (operate within a browser-based operating system). The computingdevice 210 includes a local memory 265 and a processor 267. Theprocessor 267 can be associated with any of the components of thecomputing device 210, and can be used for execution of any of theoperations of the computing device 210.

The file manager application 230 includes a user interface handler 236configured to handle processing related to the user interface providedfrom the storage system 250 by the file manager 255. The file managerapplication 230 includes a state manager 232 that can be used by a userof the computing device 210 to change a state of one or more of thefiles 29 associated with the storage system 250 (via a user interface,which can be a browser-based operating system in some implementations).The file manager application 230 also includes a login module 234configured to handle one or more user accounts associated with the files29 (via a user interface).

The computing device 210 includes a client connection module 240configured to establish at least a portion of a communication linkbetween the computing device 210 and the storage system 250. In someimplementations, the communication link between the computing device 210and the storage system 250 can be a wireless connection, a wiredconnection, a peer-to-peer connection, a network connection, a secureconnection, an encrypted connection, and/or so forth.

The computing device 210 also includes an input device 280 that can beconfigured to trigger one or more operations of the computing device210. In some implementations, the input device 280 can be, or caninclude, for example, a mouse device, a keyboard device, a touchpaddevice, a microphone, and/or so forth. The computing device 210 includesa display 270 that can be any type display such as, for example, a lightemitting diode (LED) display, an electrostatic touch device, a resistivetouchscreen device, a surface acoustic wave (SAW) device, a capacitivetouchscreen device, a pressure sensitive device, a surface capacitivedevice, a projected capacitive touch (PCT) device, and/or so forth. Ifthe display 270 is a touch sensitive device, the display 270 canfunction as an input device. For example, the display 270 can beconfigured to display a virtual keyboard (e.g., emulate a keyboard) thatcan be used by a user as an input device.

The components (e.g., modules, processors) of the computing device 210and/or the storage system 250 can be configured to operate based on oneor more platforms (e.g., one or more similar or different platforms)that can include one or more types of hardware, software, firmware,operating systems, runtime libraries, and/or so forth. In someimplementations, the components of the computing device 210 and/or thestorage system 250 can be configured to operate within a cluster ofdevices (e.g., a server farm). In such an implementation, thefunctionality and processing of the components of the computing device210 and/or the storage system 250 can be distributed to several devicesof the cluster of devices.

The components of the computing device 210 and/or the components of thestorage system 250 can be, or can include, any type of hardware and/orsoftware configured to process attributes. In some implementations, oneor more portions of the components shown in the components of thecomputing device 210 and/or the components of the storage system 250 inFIG. 3 can be, or can include, a hardware-based module (e.g., a digitalsignal processor (DSP), a field programmable gate array (FPGA), amemory), a firmware module, and/or a software-based module (e.g., amodule of computer code, a set of computer-readable instructions thatcan be executed at a computer). For example, in some implementations,one or more portions of the components of the computing device 210and/or the components of the storage system 250 can be, or can include,a software module configured for execution by at least one processor(not shown). In some implementations, the functionality of thecomponents can be included in different modules and/or differentcomponents than those shown in FIG. 2.

In some implementations, one or more of the components of the computingdevice 210 and/or the components of the storage system 250 can be, orcan include, processors configured to process instructions stored in amemory (in conjunction with or in addition to those shown). For example,the file manager application 230 (and/or a portion thereof) can be, orcan include, a combination of a processor and a memory configured toexecute instructions related to a process to implement one or morefunctions.

In some implementations, the storage system 250 can be a remotedatabase, a local database, a distributed database, a relationaldatabase, a hierarchical database, and/or so forth. In someimplementations, at least some portions of the storage system 250 can bestored in a memory (not shown) (e.g., a local memory) of the computingdevice 210. In some implementations, the storage system 250 can be, orcan include, a memory shared by multiple devices such as computingdevice 210. In some implementations, the storage system 250 can beassociated with a server device (not shown) within a network andconfigured to serve the components of the computing device 210.

Although not shown, in some implementations, the components of thecomputing device 210 and/or the components of the storage system 250 canbe configured to operate within, for example, a data center (e.g., acloud computing environment), a computer system, one or more server/hostdevices, and/or so forth. In some implementations, the components of thecomputing device 210 and/or the components of the storage system 250 canbe configured to operate within a network. Thus, the components of thecomputing device 210 and/or the components of the storage system 250 canbe configured to function within various types of network environmentsthat can include one or more devices and/or one or more server devices.For example, the network can be, or can include, a local area network(LAN), a wide area network (WAN), and/or so forth. The network can be,or can include, a wireless network and/or wireless network implementedusing, for example, gateway devices, bridges, switches, and/or so forth.The network can include one or more segments and/or can have portionsbased on various protocols such as Internet Protocol (IP) and/or aproprietary protocol. The network can include at least a portion of theInternet.

FIG. 3 is a diagram that illustrates a user interface 300 that can beprovided by a file manager to a computing device. The user interface 300can be provided by the file manager 155 shown in FIG. 1 and/or the filemanager 255 shown in FIG. 2. The user interface 300 can be received by(e.g., controlled at) or more of the computing devices 110, 120 shown inFIG. 1, and/or the computing device 210 shown in FIG. 2.

As shown in FIG. 3, a listing of files 320 is represented within theuser interface 300. The listing of files 320 includes files representedby the names (shown in column 321) File A through File L. The listing offiles 320 includes a variety of information about each of the filesincluding size (shown in column 322), date (shown in column 323), type(shown in column 324), and offline availability (shown in column 325).The files represented within the listing of files 320 can be designatedinto categories such as, for example, web files, the client files,remote source files, and/or so forth.

As shown in FIG. 3, even though the listing of files 320 can includefiles designated in a variety of categories, the files are representedwithin a single user interface 300 and in a single window labeled“Drive”. In some implementations, other types of files, including filesstored on an external storage device (such as a universal serial bus(USB) device), downloaded files, and/or so forth, can be listed in theDrive window.

In this implementation, several of the files represented within thelisting of files 320 are shown as being designated as available offline.The files that are designated as being available offline are shown incolumn 325 with solid box icons that have been completely filled in(contrasted with open box icons which can be toggled to solid boxicons). In some implementations, the offline availability of one or moreof the files can be designated by a user via a computing device (e.g.,the computing device 110 shown in FIG. 1). In such implementations, thefiles that are designated for offline availability can be stored in alocal memory of the computing device. In some implementations, if thelocal memory of the computing device does not have sufficient space,additional files may not be designated for offline availability.

In this implementation, the files represented within the listing offiles 320 can be in one of several states. In some implementations, oneor more of the states can be designated based on a category of the file.In some implementations, one or more of the states can designated basedon whether a file has been recently (or is currently) cached orun-cached in a local memory of a computing device. In someimplementations, a state of the file can be designated by the user (viaan instruction from a computing device of a user). In someimplementations, a state of the file can be designated by default(without an explicit instruction from a computing device of a user). Insome implementations, a state of the file can be designated based onmetadata associated with the file. In other words, the state of a filecan be based on any combination of a category designation, aninstructions from a user, by default, how recently a file has beenlocally cached or whether the file is un-cached (not locally cached),and/or so forth. In some implementations, files represented within thelisting of files 320 that are in a particular state can be representedwithin the user interface 300 with an icon, color scheme, font, and/oranother designation so that the user can readily identify the state ofthe file.

For example, file A, since it is designated as (e.g., pinned as) a filefor offline availability can be in an offline available state. In thisimplementation, the file A can readily be identified as available foroffline processing by the solid box icon. As another example, file H,since it is not designated for offline availability can be in an onlineavailable state. Accordingly, file H may only be available for access bya computing device (e.g., the computing device 110) on a storage system(e.g., the storage system 150) when the computing device is incommunication with the storage system. In this implementation, filesassociated with an open circle icon are web files. For example, file Gis associated with an open circle and is a web file. The web files canbe in an online available state even if not explicitly designated foroffline availability by a user. In some implementations, the defaultstate for the web files can be an online available state. In someimplementations, web files can be accessed using an extension of a webapplication that is available offline. In some implementations, filesthat are cached in a local memory (but are not web files or designatedfor offline availability) can also be made available offline (until theyare removed from the cache), such as discussed in further detail belowwith respect to FIG. 4.

In some implementations, files that are cached in a local memory can berecently accessed files that have been accessed within a threshold timeperiod. Accordingly, at least some files that are explicitly pinned maybe files that have been accessed outside of the threshold time periodand are un-cached (not currently cached in a local memory of a computingdevice because the files have not recently been accessed). Whenexplicitly pinned, the un-cached files can be moved to local storage andcached.

The user interface 300 shown in FIG. 3, or derivative thereof, can beused by one or more applications (e.g., Web applications, nativeapplications) at a computing device (e.g., the computing device 110shown in FIG. 1). For example, one or more of the files representedwithin the listing of files 320 shown in the user interface 300 can beselected and attached to a message via an e-mail application. In someimplementations, a photo editing application or a word-processingapplication can be used to access one or more the files representedwithin the listing of files 320 shown in the user interface 300.

FIG. 4 is a diagram illustrating a file system 400 that implementsexample approaches for fetching (caching) files from a cloud-basedstorage system 450 (e.g., such as the storage system 150 shown inFIG. 1) for storage in a local memory 412 (e.g., such the local memory112 shown in FIG. 1), as well as evicting cached files from the localmemory 412. The approaches shown in FIG. 4 and described below are givenby way of example. The order of fetching and/or evicting files may bedifferent in various implementations. In the following discussion,example approaches for fetching (caching) files will be described andthen corresponding approaches for evicting cached files (from localmemory) will be described.

The approaches shown in FIG. 4 may be implemented using the techniquesand/or apparatuses that were discussed above with respect to FIGS. 1-3.Still further, the approaches illustrated in FIG. 4 may be implementedin a dynamic fashion. For instance, files may be fetched (cached) and/orevicted (removed) dynamically (on an ongoing basis) based on a number offactors, such as a file being modified, a file being deleted, a filebeing opened, a file being closed, a file being designated as beingavailable offline (pinned), a file being undesignated as being availableoffline (unpinned), and/or so forth. Accordingly, the specific filesthat are cached (stored) in the local memory 412 (e.g., are availableoffline) may continually change based on factors such as those justdescribed. Also, caching and/or evicting files from a file cacheincluded in the local memory 412 may be based on how much local memoryis used for cached files and/or an amount of the local memory 412 thatis needed to perform a requested operation (e.g., a request by a user).In some implementations, file caching may be performed, or notperformed, based on a type of data network access that is available to alocal computing device that includes the local memory 412. For instance,if only cellular data network access is available, file caching may besuspended until wired or WiFi network access is available, as anexample.

As shown in FIG. 4, files may be cached (fetched, pre-fetched) accordingto a priority hierarchy. For instance, in the file system 400, filesthat are open by a user (open files) 420 may be cached in the localmemory 412 with a highest priority. Accordingly, when a user is loggedinto a computing system that includes the local memory 412 and providesan indication that a specific file on the cloud storage system 450 is tobe opened (e.g., an indication that a document file is to be opened in aword processor), that specific file would be fetched from the cloudstorage system 450 and cached in the local memory 412. However, in someimplementations, certain file types may not be cached in local memory412, even when opened by a user. For instance, in the file system 400,Web files (such as the Web file 10) may not be cached in the localmemory 412, because processing of such files may be handled by a Webapplication within a cloud environment and there may not be anysignificant advantage to locally caching such files.

As also shown in FIG. 4, pinned files 420 may be cached in the localmemory 412 with a second highest priority (after open files). In anexample implementation, after caching of the open files (user openedfiles) 420 is complete, the file system 400 may proceed to cache pinnedfiles 430 (files that are designated by a user as being availableoffline, such as discussed with respect to FIG. 3). In some embodiments,if a threshold amount of the local memory 412 that is available for filecaching is reached (or exceeded), such as while caching open files 420or pinned files 430, the file system 400 (e.g., a computing deviceincluding the local memory 412) may perform an eviction process (such asdescribed below) to free up storage space in the local memory 412 forfile prefetching (caching) to continue. Alternatively, the file system400 may discontinue (at least temporarily) file caching. In otherembodiments, if a threshold amount of the local memory 412 available forfile caching is reached (or exceeded), a notification may be provided toa user indicating that one or more files open should be (need to be)closed and/or one more files should be (need to be) unpinned(undesignated as being available offline) in order to allow file cachingto continue.

In the example shown in FIG. 4, if an indication is received todesignate a file as being pinned, and that file was previously cached inthe local memory 412, the file may not be re-cached (re-fetched).Likewise, if an indication is received to open a file, and that file waspreviously cached in the local memory 412, the file may not be re-cached(re-fetched).

After caching of the open files 420 and the pinned files 430 iscomplete, the file system 400 may then prefetch (cache) additional files440 from the cloud storage system 450 (for storage in the local memory412) based on various attributes of files that are associated with agiven (logged in) user. In the file system 400, the cloud storage system450 may traverse a directory structure for a given user in order toconstruct a list of relevant file attributes. This traversal may beperformed in response to the user accessing any of his or her files onthe cloud storage system 450, or may be performed as part of a log inprocess for the user.

In an example implementation, after caching the open files 420 and thepinned files 430, the file system 400 may cache a predetermined numberof files (e.g., 50 files, 100 files or 200 files) that have beenrecently accessed by a user (e.g., viewed by the user and/or modified bythe user) and are associated with (owned by) the user, e.g., recentlyviewed/modified (accessed) files 442. The determination of whichrecently accessed files 442 are to be cached (fetched) may be based onone or more respective file attributes (e.g., collected during the filedirectory traversal discussed above) for each of the user's stored filesthat is included in the cloud storage system 450. For instance, the fileattributes that are examined to determine which files to cache mayinclude a “lastViewedByMeDate” attribute or a “modifiedByMeDate”attribute.

For example, if the predetermined number of recently accessed files 442to be cached is 50 files, the memory system 400 may cache the 25 mostrecently modified files and the 25 most recently viewed (but notmodified files). The 25 most recently modified files may be cachedfirst, or may be cached in alternating fashion with the 25 most recentlyviewed files. In another implementation, the memory system 400 may cachethe 50 most recently viewed files, which may or may not include recentlymodified files. In yet another embodiment, the memory system 400 maycache the 50 most recently modified files and not cache files that wereonly recently viewed (and not modified). As previously discussed, if athreshold amount of the local memory 412 that is available for filecaching is reached (or exceeded), the file system 400 may perform aneviction process (such as described below) to free up storage space inthe local memory 412 to allow file prefetching (caching) to continue or,alternatively, the file system 400 may stop caching files in the localmemory 412. The threshold amount of storage may be calculated as apercentage of total storage space in the local memory 412, or may bespecified as a fixed amount of storage space in the local memory 412.Also, the file system 400 may stop caching files if a total number ofcached files reaches a threshold value indicating an upper limit ofcached files allowed (e.g., 500, 1,000, 5,000, etc.).

After caching the recently accessed files 442, such as was describedabove, the file system 400 may then cache a predetermined number offiles that have been recently shared with the given (logged in) user,such as by using respective “sharedWithMeDate” file attributes of filesassociated with (owned by) the given (logged in) user, e.g., recentlyshared files 444. For example, if the predetermined number of recentlyshared files 444 that are to be cached is 25, the file system 400 maycache the 25 files that have most recently been shared with the givenuser (and were not previously cached due to the file being open, pinnedor recently accessed). In an example implementation, the file system 400may cache the most recently shared files 444 in this manner until thepredetermined number of recently shared files (e.g., 25 files) has beencached. In other embodiments, as shown in FIG. 4, caching of therecently shared files 444 may be merged with caching of recentlyaccessed files 442. For example, if a predetermined number of 50 filesare to be cached, the file system 400 may alternate between mostrecently modified files, most recently viewed files and/or most recentlyshared files for a given user until the predetermined number of files(50 files) have been cached. Alternatively, the file system 400 may stopcaching files if the threshold amount of storage space available forcached files is reached (or exceeded).

After the caching of the predetermined number of recently shared files444 is complete, such as just described, the file system 400 may thencache “relevant” files 446. Relevant files 446 may be files that arerelated to one or more previously cached files (e.g., open files 420,pinned files 430, recently accessed files 442 and/or recently sharedfiles 444). For example, a relevant file 446 may be a file that is in asame directory as a previously cached file. In other implementations, arelevant file 446 may be a file that is of a same file type as apreviously cached file. In still other implementations, other criteriamay be used to determine one or more relevant files for the previouslycached files.

In the file system 400, a number of approaches are possible for cachingthe relevant files 446. In one implementation, all of the relevant files446 may be determined for each previously cached file (in a same orderas those files were cached) and all the relevant files 446 for a givenpreviously cached file may be cached before caching the relevant files446 for the next previously cached file. For example, if three fileswere previously cached, File A first, File B second and File C third, inthis implementation, all of the relevant files for File A would becached before caching any relevant files 446 for File B or File C.Likewise, all the relevant files 446 for File B would be cached beforecaching any relevant files for File C. Accordingly, the relevant files446 for File C would be cached last, i.e., after caching the relevantfiles 446 for File A followed by the relevant files 446 for File B.

In another implementation, the relevant files 446 may be cached byalternating between relevant files 446 for each of the previously cachedfiles, such as by caching one relevant file for each previously cachedfile in turn. Again using the illustration of previously cached filesFile A, File B and File C, in this example, one relevant file for File Amay be cached, followed by one relevant file for File B, followed by onerelevant file for File C, then repeating the sequence. In such anapproach, the order in which the relevant files 446 for a givenpreviously cached file are cached (e.g., at each iteration) may bedetermined using criteria such as a “lastViewedByMeDate” attribute, a“modifiedByMeDate” attribute and/or a “sharedWithMeDate” attribute, suchas in similar manners as described above.

When caching the relevant files 446, the process may continue until allrelevant files 446 are cached, a number of cached files reaches a numberof cached files threshold or a threshold amount of data storage (in thelocal memory 412) is used by the cached files (open files 420, pinnedfiles 430, recently accessed files 442, recently shared files 444 andrelevant files 446). Also, if the relevant files 446 are cached in thealternating fashion described, once all of the relevant files 446 for agiven previously cached file are also cached, relevant file caching forthe given previously cached file may be skipped for subsequentiterations.

In some embodiments, the set of relevant files 446 may be extremelylarge (e.g., as compared to available cache storage space in the localmemory 412). In other embodiments, the set of relevant files 446 thatare truly related to the previously cached files may be difficult (orimpossible) to determine because a given user's file directory structureis not well defined (e.g., all of the user's files are stored in asingle directory or a small number of directories). In such instances,the file system 400 may be configured to forego caching relevant files.

In other embodiments, the relevant files 446 may be determined in othermanners. For instance, the relevant files 446 for a given previouslycached file may include files that are included in sub-directories orparent directories (e.g., that are not a root directory) of a directoryin which the previously cached file is located. In otherimplementations, the relevant files 446 may be determined in still othermanners. For instance, the relevant files 446 may include files locatedin directories that are browsed by the user (logged in user). Dependingon the particular implementation, a number of other approaches may beused to determine the relevant files 446.

As indicated above, the files that are cached to the local memory 412may be subject to one or limitations. For instance, the amount ofstorage space in the local memory 412 that is available for file cachingmay be limited. In some implementations, the amount of storage space inthe local memory 412 that is available for file caching may be definedas a fixed amount of storage space. In other embodiments, the amount ofstorage space in the local memory 412 that is available for file cachingmay be defined as a percentage of the total storage space in the localmemory 412. In still other embodiments, the number of cached files thatmay be stored in the local memory 412 may be limited to a thresholdnumber of cached files. Regardless of the criteria use to determine theamount of available space for file caching in the local memory 412,situations will occur where the cache is determined to be “full”,indicating no additional files can be cached. In such situations, aneviction process (indicated by the arrow 460 in FIG. 4) may be performedin the file system 400, such as in the manners described below.

In an example implementation, when the file cache included in the localmemory 412 is determined to be full, files may be evicted using apriority hierarchy that is substantially the inverse of a priorityhierarchy that was used to cache the files that are included in the filecache. The number of files evicted will depend on the particularimplementation. For example, files may be evicted until a given amountof storage available for file caching is freed up. In other embodiments,files may be evicted until a certain percentage of the total file cachestorage space is freed up. In still other embodiments, files may beevicted until an amount of file cache storage space needed for caching aspecific file is freed up. In yet other embodiments, files may beevicted until a number of cached files is below an eviction threshold. Anumber of other approaches may be used to determine the number of files(amount of data) to evict.

The order in which files are evicted from the cache may be furtherdetermined by their respective most recent timestamps. For instance,when a file is first cached, it may be given a timestamp(date/timestamp) indicating when it was cached. In some embodiments,each time a cached file is accessed, its timestamp may be updated toreflect the time of the last access (view and/or modification) of therespective cached file. Accordingly, the eviction process 460 may notevict cached files in the exact reverse order in which they were cached,as the eviction process may be based on the most recent timestamps(timestamp from time cached or timestamp from most recent access).

In an example embodiment, the eviction process 460 may evict files fromthe file cache in the local memory 412 in the following manner. Therelevant files 446 may be evicted first, where the relevant file 446that has the oldest timestamp is the first to be evicted and therelevant file with the newest timestamp is the last to be evicted. Asindicated above, file eviction process 460 may be discontinued once apredetermined amount of file cache storage space is freed up. In thisexample, once all of the cached relevant files 446 are evicted, therecently shared files 444 may be evicted starting with the oldesttimestamp proceeding in reverse order to the recently shared file 444with the newest timestamp. Again, the file eviction process 460 may bediscontinued once a predetermined amount of file cache storage space isfreed up. Once all of the cached recently shared files 444 are evicted,the recently accessed files 442 may be evicted starting with the oldesttimestamp proceeding in reverse order to the recently accessed file 442with the newest timestamp. Yet again, the file eviction process 460 maybe discontinued once a predetermined amount of file cache storage spaceis freed up. In other implementations, eviction of the cached recentlyshared files 444 and the cached recently accessed files 442 may bemerged, with those two sets of cached files being evicted as a groupbased on their timestamps, from the oldest timestamp to newesttimestamp. In like fashion as discussed above, once a predeterminedamount of file cache storage space is freed up, file eviction may bediscontinued. Of course, a number of other approaches may be used forevicting files from a file cache.

In the event that all of the files 440 are evicted from the file cacheof the local memory 412 and the amount of needed file cache storagespace is still not freed up, a notification may be provided to a user(e.g., a logged in user) requesting that the user unpin files and/orclose files in order to allow file caching to proceed. In otherimplementations, files may be automatically unpinned by the file system400, such as by using similar criteria to those used for evicting thefiles 440 from the file cache. For example, files may be automaticallyunpinned based on their timestamps (oldest to newest).

FIG. 5 is a flowchart that illustrates a method related to filehandling. As shown in FIG. 5, at least a portion of a communication linkbetween a computing device and a storage system operating within a cloudenvironment is established (block 500).

As shown in FIG. 5, a listing of files representing a plurality of fileswhere at least a first portion of the plurality of files are stored in alocal memory of the computing device and a second portion of theplurality of files are stored in the storage system is stored (block510). In some embodiments, the listing of files can be stored at andaccessed from the cloud environment. In some embodiments, the listing offiles can be stored at and access from the computing device.

A file from the listing of files is designated for availability offlinebased on a file category associated with the file from the listing offiles (block 520). In some embodiments, the file can be designated basedon a category associated with the file. In some embodiments, the filecan be designated based on instructions triggered by a user via thecomputing device. In some embodiments, the file can be designated bydefault or based on a caching state of the file.

FIGS. 6A-6C are flowcharts that illustrate methods related to filecaching. The methods shown in FIGS. 6A-6C may be implemented inconjunction with one another using, for example, the file handlingapproaches described herein. As shown in FIG. 6A, at least a portion ofa communication link between a computing device and a storage systemoperating within a cloud environment is established (block 600).

As shown in FIG. 6A, a request to open a first file stored on thestorage system is received (block 605). In response to the request toopen the first file, the first file is cached in a local memory of thecomputing device, the first file being cached with a first priority(block 610). In some embodiments, the first file can be one of aplurality of files cached with the first priority. The plurality offiles (with the first priority) can be cached in the local memory of thecomputing device in response to respective requests to open each of theplurality of files.

As also shown in FIG. 6A, a request that a second file stored on thestorage system be available offline is received (block 615). In responseto the request that the second file be available offline, the secondfile is cached in the local memory of the computing device (block 620),the second file being cached with a second priority that is lower thanthe first priority. In some embodiments, the second file can be one of aplurality of files cached with the second priority. The plurality offiles being cached (with the second priority) in the local memory of thecomputing device can be cached in response to respective requests thateach of the plurality of files be available offline.

As further shown in FIG. 6A, a third file stored in the storage systemis predictively cached in the local memory of the computing device(block 625). The third file can be selected based on one or moreattributes of the third file, and the third file can be cached with athird priority that is lower than the second priority.

The third file (at block 625) can be one of a plurality of files cachedwith the third priority. In some embodiments, caching the plurality offiles with the third priority can include, caching a first predeterminednumber of files based on respective last modified dates, caching asecond predetermined number of files based on respective last vieweddates, caching a third predetermined number of files based on respectiveshared dates and/or caching a fourth predetermined number of files basedon their relationship, in the storage system, to one or more previouslycached files. In other embodiments, caching the plurality of files withthe third priority can include caching a predetermined number of filesby iterating between caching files based on respective last modifieddates and respective last viewed dates of files stored in the storagesystem.

In certain embodiments, the first file, the second file and the thirdfile (of FIG. 6 A) can be cached in the local memory of the computingdevice based on their respective priorities and based on an amount ofavailable file cache storage capacity in the local memory of thecomputing device. For instance, the files can be cached, in order ofpriority (e.g., also using date stamps for files of the same cachingpriority), until a file caching threshold (e.g., number of files, amountof data and/or so forth) is met or exceeded, such as discussed herein.

As indicated above, the method illustrated in FIG. 6B can be implementedin conjunction with the method of FIG. 6A and, for purposes ofillustration, will be described as such. As shown in FIG. 6B, a requestto open a fourth file stored on the storage system is received (block630). In response to receiving the request to the open the fourth file,if caching the fourth file in the local memory of the computing devicewill exceed a file caching threshold, the third file is evicted(removed) from the local memory of the computing device (block 635). Thefourth file is cached in the local memory of the computing device withthe first priority (block 640).

As indicated above, the method illustrated in FIG. 6C can (in likefashion as the method illustrated in FIG. 6B) be implemented inconjunction with the method of FIG. 6A and, for purposes ofillustration, will be described as such. As shown in FIG. 6C a requestto open the third file from the local memory of the computing device isreceived (block 645). In response to the request of block 645, thecaching priority of the third file is changed from the third priority tothe first priority (block 650) and a last viewed date of the third fileis changed (655).

FIG. 7 is a flowchart illustrating a method related to eviction ofcached files. As shown in FIG. 7, at least a portion of a communicationlink between a computing device and a storage system operating within acloud environment is established (block 700). The computing device caninclude a local memory that is configured to cache files from thestorage system. An indication that a file caching threshold of the localmemory of the computing device has been met or exceeded is received(block 710). In response to the indication at block 710, at least aportion of a set of cached files are evicted from the local memory ofthe computing device, e.g., until an eviction threshold is met. The atleast a portion of the set of cached files can be evicted from a lowestcaching priority to a highest caching priority and evicted based onrespective timestamps of each file of the set of cached files. As shownin FIG. 7, confirmation from a user is requested prior to evicting fileswith the first caching priority or the second caching priority. In someembodiments, such confirmation may not be requested before evictingfiles with a first caching priority (open files) or a second cachingpriority (pinned files).

In some embodiments, the set of cached files can include a first filewith a first caching priority, the first file having been cached inresponse to a request to open the first file. The set of cached filescan also include a second file with a second caching priority, thesecond file having been cached in response to a request that the secondfile be available offline, the second priority being lower than thefirst priority. The set of cached files can further include a third filewith a third caching priority, the third file having been cached basedon at least one of a last modified date and a last viewed date, thethird caching priority being lower than the second caching priority. Theset of cached files can still further include a fourth file with afourth caching priority, the fourth file having been cached based on adate the file was shared, the fourth caching priority being lower thanthe third caching priority. The set of cached files can also furtherinclude a fifth file with a fifth caching priority, the fifth cachingpriority being lower than the fourth caching priority, the fifth filehaving been cached based on its relationship in the storage system to atleast one of the first file, the second file, the third file and/or thefourth file.

In similar fashion as discussed above with respect to FIG. 6C, a requestto access a file of the set of cached files of block 720 can bereceived, where the file for which access is requested has a cachingpriority that is lower than the highest caching priority. In response tothis request, the caching priority of the file for which access isrequested can be changed to the highest caching priority (e.g., a firstcaching priority).

In a general aspect, a computer-readable storage medium can beconfigured to store instructions that when executed cause one or moreprocessors to perform a process. The process can include establishing atleast a portion of a communication link between a computing device and astorage system operating within a cloud environment. The process caninclude accessing a user interface including a listing of filesrepresenting a plurality of files where at least a first portion of theplurality of files are stored in a local memory of the computing deviceand a second portion of the plurality of files are stored in the storagesystem.

In another general aspect, a computer-readable storage medium can beconfigured to store instructions that when executed cause one or moreprocessors to perform a process. The process can include establishing atleast a portion of a communication link between a computing device and astorage system operating within a cloud environment. The process caninclude storing a listing of files representing a plurality of fileswhere at least a first portion of the plurality of files are stored in alocal memory of the computing device and a second portion of theplurality of files are stored in the storage system, and can includedesignating at least a portion of the list of files for availabilityoffline in response to at least one of an instruction received from thecomputing device or based on a file category associated with the portionof the listing of files.

In yet another general aspect, an apparatus can include a storage systemconfigured to operate within a cloud environment and configured to storea plurality of files. At least a first portion of the plurality of filesis stored in the storage system, and a second portion of the pluralityof files are synchronized in a local memory of a computing device. Insome implementations, the storage system includes a file managerconfigured to provide, to the computing device, a user interfaceincluding a listing representing the plurality of files.

In yet another general aspect, a computer-readable storage medium can beconfigured to store instructions that when executed cause one or moreprocessors to perform a process. The process can include establishing atleast a portion of a communication link between a first computing deviceand a storage system operating within a cloud environment. The processcan include storing a plurality of files and sending from the storagesystem to the first computing device, in response to a download requestfrom the first computing device, a portion of the plurality of files forcaching at the first computing device. Sending, to a second computingdevice, a user interface including a listing of files representing theplurality of files and including the portion of the plurality of filescached at the first computing device.

Implementations of the various techniques described herein may beimplemented in digital electronic circuitry, or in computer hardware,firmware, software, or in combinations of them. Implementations mayimplemented as a computer program product, i.e., a computer programtangibly embodied in an information carrier, e.g., in a machine-readablestorage device (computer-readable medium), for processing by, or tocontrol the operation of, data processing apparatus, e.g., aprogrammable processor, a computer, or multiple computers. Thus, acomputer-readable storage medium can be configured to store instructionsthat when executed cause a processor (e.g., a processor at a hostdevice, a processor at a computing device) to perform a process. Acomputer program, such as the computer program(s) described above, canbe written in any form of programming language, including compiled orinterpreted languages, and can be deployed in any form, including as astand-alone program or as a module, component, subroutine, or other unitsuitable for use in a computing environment. A computer program can bedeployed to be processed on one computer or on multiple computers at onesite or distributed across multiple sites and interconnected by acommunication network.

Method steps may be performed by one or more programmable processorsexecuting a computer program to perform functions by operating on inputdata and generating output. Method steps also may be performed by, andan apparatus may be implemented as, special purpose logic circuitry,e.g., an FPGA (field programmable gate array) or an ASIC(application-specific integrated circuit).

Processors suitable for the processing of a computer program include, byway of example, both general and special purpose microprocessors, andany one or more processors of any kind of digital computer. Generally, aprocessor will receive instructions and data from a read-only memory ora random access memory or both. Elements of a computer may include atleast one processor for executing instructions and one or more memorydevices for storing instructions and data. Generally, a computer alsomay include, or be operatively coupled to receive data from or transferdata to, or both, one or more mass storage devices for storing data,e.g., magnetic, magneto-optical disks, or optical disks. Informationcarriers suitable for embodying computer program instructions and datainclude all forms of non-volatile memory, including by way of examplesemiconductor memory devices, e.g., EPROM, EEPROM, and flash memorydevices; magnetic disks, e.g., internal hard disks or removable disks;magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor andthe memory may be supplemented by, or incorporated in special purposelogic circuitry.

To provide for interaction with a user, implementations may beimplemented on a computer having a display device, e.g., a cathode raytube (CRT), a light emitting diode (LED), or liquid crystal display(LCD) monitor, for displaying information to the user and a keyboard anda pointing device, e.g., a mouse or a trackball, by which the user canprovide input to the computer. Other kinds of devices can be used toprovide for interaction with a user as well; for example, feedbackprovided to the user can be any form of sensory feedback, e.g., visualfeedback, auditory feedback, or tactile feedback; and input from theuser can be received in any form, including acoustic, speech, or tactileinput.

Implementations may be implemented in a computing system that includes aback-end component, e.g., as a data server, or that includes amiddleware component, e.g., an application server, or that includes afront-end component, e.g., a client computer having a graphical userinterface or a Web browser through which a user can interact with animplementation, or any combination of such back-end, middleware, orfront-end components. Components may be interconnected by any form ormedium of digital data communication, e.g., a communication network.Examples of communication networks include a local area network (LAN)and a wide area network (WAN), e.g., the Internet.

Reference throughout this specification to “one implementation” or “animplementation” means that a particular feature, structure, orcharacteristic described in connection with the implementation isincluded in at least one implementation. Thus, the appearances of thephrase “in one implementation” or “in an implementation” in variousplaces throughout this specification are not necessarily all referringto the same implementation. In addition, the term “or” is intended tomean an inclusive “or” rather than an exclusive “or.”

While certain features of the described implementations have beenillustrated as described herein, many modifications, substitutions,changes and equivalents will now occur to those skilled in the art. Itis, therefore, to be understood that the appended claims are intended tocover all such modifications and changes as fall within the scope of theimplementations. It should be understood that they have been presentedby way of example only, not limitation, and various changes in form anddetails may be made. Any portion of the apparatus and/or methodsdescribed herein may be combined in any combination, except mutuallyexclusive combinations. The implementations described herein can includevarious combinations and/or sub-combinations of the functions,components and/or features of the different implementations described.

What is claimed is:
 1. A non-transitory computer-readable storage mediumconfigured to store instructions that when executed cause one or moreprocessors to perform a process, the process comprising: establishing atleast a portion of a communication link between a computing device and astorage system operating within a cloud environment; storing a listingof files representing a plurality of files where at least a firstportion of the plurality of files are stored in a local memory of thecomputing device and a second portion of the plurality of files arestored in the storage system; and designating a file from the listing offiles for availability offline based on a file category associated withthe file from the listing of files.
 2. The non-transitorycomputer-readable storage medium of claim 1, wherein the storage systemoperates as a primary storage system for the computing device, and thelocal memory of the computing device operates as a cache of the storagesystem.
 3. The non-transitory computer-readable storage medium of claim1, wherein the listing of files includes: a reference to a web fileproduced and stored in the storage system using a web application, areference to a client file produced using a local application installedat the computing device, and a reference to a remote source file from aremote source operating outside of the cloud environment.
 4. Thenon-transitory computer-readable storage medium of claim 1, wherein thefile from the listing of files is a first file from the listing offiles, the file category is a web file category, the process furthercomprising: designating at least a second file from the listing of filesfor availability offline in response to a first instruction receivedfrom the computing device, the second file being an un-cached file; anddesignating at least a third file from the listing of files cached inthe local memory for availability offline.
 5. The non-transitorycomputer-readable storage medium of claim 1, wherein the listing offiles is a unitary listing of files spanning the local memory of thecomputing device and a portion of the storage system allocated to thecomputing device.
 6. The non-transitory computer-readable storage mediumof claim 1, wherein the computing device is a first computing deviceremotely connected to the cloud environment, the process furthercomprising: accessing the listing of files at a second computing deviceremotely connected to the cloud environment, the listing of files whenaccessed at the second computing device being the same as the listing offiles when accessed at the first computing device.
 7. The non-transitorycomputer-readable storage medium of claim 1, wherein the designatingincludes designating the file from the listing of files for availabilityoffline based on the file category without explicit instruction receivedfrom the computing device.
 8. The non-transitory computer-readablestorage medium of claim 1, wherein the file from the listing of files isa first file designated as being in an offline available state based onthe file category, the listing of files includes a second filedesignated as being in the offline available state based on the secondfile being recently accessed at the local memory of the computingdevice, the listing of files includes a third file designated as beingin the offline available state in response to an instruction from thecomputing device, and the listing of files includes a fourth filedesignated as being in an online available state.
 9. A non-transitorycomputer-readable storage medium configured to store instructions thatwhen executed cause one or more processors to perform a process, theprocess comprising: establishing at least a portion of a communicationlink between a computing device and a storage system operating within acloud environment; receiving a request to open a first file stored onthe storage system; in response to the request to open the first file,caching the first file in a local memory of the computing device, thefirst file being cached with a first priority; receiving a request thata second file stored on the storage system be available offline; inresponse to the request that the second file be available offline,caching the second file in the local memory of the computing device, thesecond file being cached with a second priority that is lower than thefirst priority; and predictively caching, in the local memory of thecomputing device, a third file stored in the storage system, the thirdfile being selected based on one or more attributes of the third file,the third file being cached with a third priority that is lower than thesecond priority.
 10. The non-transitory computer-readable storage mediumof claim 9, wherein the first file, the second file and the third fileare cached in the local memory of the computing device based on theirrespective priorities and based on an amount of available file cachestorage capacity in the local memory of the computing device.
 11. Thenon-transitory computer-readable storage medium of claim 9, the processfurther comprising: receiving a request to open a fourth file stored onthe storage system; and in response to receiving the request to the openthe fourth file: if caching the fourth file in the local memory of thecomputing device will exceed a file caching threshold, evicting thethird file from the local memory of the computing device; and cachingthe fourth file in the local memory of the computing device with thefirst priority.
 12. The non-transitory computer-readable storage mediumof claim 9, wherein the first file is one of a plurality of files cachedwith the first priority, the plurality of files being cached in thelocal memory of the computing device in response to respective requeststo open each of the plurality of files.
 13. The non-transitorycomputer-readable storage medium of claim 9, wherein the second file isone of a plurality of files cached with the second priority, theplurality of files being cached in the local memory of the computingdevice in response to respective requests that each of the plurality offiles be available offline.
 14. The non-transitory computer-readablestorage medium of claim 9, wherein: the third file is one of a pluralityof files cached with the third priority; and caching the plurality offiles with the third priority includes: caching a first predeterminednumber of files based on respective last modified dates; caching asecond predetermined number of files based on respective last vieweddates; and caching a third predetermined number of files based onrespective shared dates.
 15. The non-transitory computer-readablestorage medium of claim 14, wherein caching the plurality of files withthe third priority further includes caching a fourth predeterminednumber of files based on their relationship in the storage system to oneor more previously cached files.
 16. The non-transitorycomputer-readable storage medium of claim 9, wherein: the third file isone of a plurality of files cached with the third priority; and cachingthe plurality of files with the third priority includes caching apredetermined number of files by iterating between caching files basedon respective last modified dates and caching files based on respectivelast viewed dates.
 17. The non-transitory computer-readable storagemedium of claim 9, the process further comprising: receiving a requestto open the third file from the local memory of the computing device;changing the third file from the third priority to the first priority;and changing a last viewed date of the third file.
 18. A non-transitorycomputer-readable storage medium configured to store instructions thatwhen executed cause one or more processors to perform a process, theprocess comprising: establishing at least a portion of a communicationlink between a computing device and a storage system operating within acloud environment, the computing device including a local memory that isconfigured to cache files from the storage system; receiving anindication that a file caching threshold of the local memory of thecomputing device has been met or exceeded; and in response to theindication, evicting, until an eviction threshold is met, at least aportion of a set of cached files from the local memory of the computingdevice, the at least a portion of the set of cached files being evictedfrom a lowest caching priority to a highest caching priority and basedon respective timestamps of each file of the set of cached files. 19.The non-transitory computer-readable storage medium of claim 18, whereinthe set of cached files includes: a first file with a first cachingpriority, the first file having been cached in response to a request toopen the first file; a second file with a second caching priority, thesecond file having been cached in response to a request that the secondfile be available offline, the second priority being lower than thefirst priority; a third file with a third caching priority, the thirdfile having been cached based on at least one of a last modified dateand a last viewed date, the third caching priority being lower than thesecond caching priority; a fourth file with a fourth caching priority,the fourth file having been cached based on a date the file was shared,the fourth caching priority being lower than the third caching priority;and a fifth file with a fifth caching priority, the fifth cachingpriority being lower than the fourth caching priority, the fifth filehaving been cached based on its relationship in the storage system to atleast one of the first file, the second file, the third file and thefourth file.
 20. The non-transitory computer-readable storage medium ofclaim 19, the process further comprising requesting confirmation from auser prior to evicting files with the first caching priority or thesecond caching priority.
 21. The non-transitory computer-readablestorage medium of claim 18, the process further comprising: receiving arequest to access a file of the set of cached files, the file for whichaccess is requested having a caching priority that is lower than thehighest caching priority; and in response to the request, changing thecaching priority of the file for which access is requested to thehighest caching priority.